package com.hjb.service.impl.siteuseraccount;

import com.hjb.service.config.constant.Constants;
import com.hjb.service.domain.siteuser.SiteUser;
import com.hjb.service.domain.siteuser.SiteUserExample;
import com.hjb.service.domain.siteuseraccount.SiteUserBankcard;
import com.hjb.service.mapper.SiteUserBankcardMapper;
import com.hjb.service.mapper.SiteUserMapper;
import com.hjb.service.siteuseraccount.SiteUserBankcardService;
import com.hjb.service.utils.DateUtil;
import com.hjb.service.utils.MapUtil;
import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;
import java.util.Map;

/**
 * 用户卡接口业务处理类
 * @author gy
 * @date 2017-07-25
 * @version 1.0
 */
@Service
public class SiteUserBankcardServiceImpl implements SiteUserBankcardService{

	private Logger log = LoggerFactory.getLogger(getClass());

	@Autowired
	private SiteUserBankcardMapper siteUserBankcardMapper;
	@Autowired
	private SiteUserMapper siteUserMapper;

	/**
	 * 用户绑卡
	 * @param param
	 * @return
	 */
	@Override
	@Transactional
	public Map<String, Object> bindBankCard(Map<String,String> param,String bindId) {
		Map<String, Object> result = MapUtil.getRetMap();
		try {
			SiteUserBankcard siteUserBankcard = getBindDataParam(param);
			//维护用户银行关联记录
			SiteUserBankcard record = new SiteUserBankcard();
			record.setCardType(siteUserBankcard.getCardType());
			record.setCardNo(siteUserBankcard.getCardNo());
			record.setUserId(siteUserBankcard.getUserId());
			List<SiteUserBankcard> list = siteUserBankcardMapper.selectByExample(record);
			if (list == null || list.size() == 0){//新增
				siteUserBankcardMapper.insert(siteUserBankcard);
			}
			if (list !=null && list.size()>0){//修改
				SiteUserBankcard userBankcard = getSiteUserBankcard(list.get(0),siteUserBankcard);
				siteUserBankcardMapper.updateByPrimaryKey(userBankcard);
			}
			//维护租户信息表
			SiteUserExample siteUserExample = new SiteUserExample();
			siteUserExample.createCriteria().andUserIdEqualTo(siteUserBankcard.getUserId());
			List<SiteUser> siteUserList = siteUserMapper.selectByExample(siteUserExample);
			if (siteUserList == null || siteUserList.size() == 0){
				result.put("result_code", MapUtil.INTF_ERR_CODE);
				result.put("result_info", "用户不存在");
				return result;
			}
			SiteUser siteUser = getSiteUser(siteUserList.get(0),siteUserBankcard);
			siteUser.setName(param.get("idCardName"));
			String idCard = param.get("idCard");
			siteUser.setCardNumber(idCard);
			siteUser.setSex(1);
			if (Integer.valueOf(idCard.substring(idCard.length()-2,idCard.length()-1)) % 2 ==0){
				siteUser.setSex(0);
			}
			siteUser.setBirthday(Integer.valueOf(idCard.substring(6,14)));
			siteUser.setIsBindCard(1);
//			siteUser.setBindId(bindId);
			siteUserMapper.updateByPrimaryKey(siteUser);
		}catch (Exception e){
			log.info("用户绑卡失败："+e);
			result.put("result_code", MapUtil.INTF_ERR_CODE);
			result.put("result_info", "用户绑卡失败");
		}
		return result;
	}

	/**
	 * 用户卡解绑
	 * @param siteUserBankcard
	 * @return
	 */
	@Override
	public Map<String, Object> unbindBankCard(SiteUserBankcard siteUserBankcard) {
		return null;
	}

	private SiteUserBankcard getBindDataParam(Map<String,String> request){
		SiteUserBankcard siteUserBankcard = new SiteUserBankcard();
		siteUserBankcard.setUserId(Integer.valueOf(request.get("useId")));
		if (StringUtils.isNotBlank(request.get("acctType"))){
			siteUserBankcard.setAcctType(Integer.valueOf(request.get("acctType")));
		}
		siteUserBankcard.setBankAddr(request.get("bankAddr"));
		siteUserBankcard.setBankCode(request.get("bankCode"));
		siteUserBankcard.setBankName(request.get("bankName"));
		siteUserBankcard.setCardNo(request.get("bankCardNum"));
		siteUserBankcard.setCityCode(request.get("cityCode"));
		siteUserBankcard.setProviceCode(request.get("proviceCode"));
		siteUserBankcard.setOrderId(request.get("mhtOrderNo"));
		siteUserBankcard.setRemainPhone(request.get("mobile"));
		siteUserBankcard.setCardType(2);
		siteUserBankcard.setType(1);
		siteUserBankcard.setStatus(1);
		siteUserBankcard.setThirdCode("HYL");
		siteUserBankcard.setUnbindStatus(0);
		siteUserBankcard.setCreateTime(DateUtil.now("yyyy-MM-dd HH:mm:ss"));
		return siteUserBankcard;
	}

	private SiteUserBankcard getSiteUserBankcard(SiteUserBankcard userBankcard,SiteUserBankcard siteUserBankcard){
		userBankcard.setCardType(siteUserBankcard.getCardType());
		userBankcard.setCardNo(siteUserBankcard.getCardNo());
		userBankcard.setBankName(siteUserBankcard.getBankName());
		userBankcard.setUserId(siteUserBankcard.getUserId());
		userBankcard.setAcctType(siteUserBankcard.getAcctType());
		userBankcard.setBankAddr(siteUserBankcard.getBankAddr());
		userBankcard.setBankCode(siteUserBankcard.getBankCode());
		userBankcard.setCityCode(siteUserBankcard.getCityCode());
		userBankcard.setProviceCode(siteUserBankcard.getProviceCode());
		userBankcard.setRemainPhone(siteUserBankcard.getRemainPhone());
		userBankcard.setType(1);
		userBankcard.setStatus(1);
		userBankcard.setThirdCode("HYL");
		userBankcard.setUnbindStatus(0);
		userBankcard.setUpdateTime(DateUtil.now("yyyy-MM-dd HH:mm:ss"));
		return userBankcard;
	}

	private SiteUser getSiteUser(SiteUser siteUser,SiteUserBankcard siteUserBankcard){
		siteUser.setBankName(siteUserBankcard.getBankName());
		siteUser.setBankCode(siteUserBankcard.getBankCode());
		siteUser.setBankCardNo(siteUserBankcard.getCardNo());
		siteUser.setBankPhone(siteUserBankcard.getRemainPhone());
		siteUser.setIsBindCard(1);
		return siteUser;
	}

	@Override
	public String queryBankInfobyUserId(Integer userId) {
		SiteUserBankcard userBank = new SiteUserBankcard();
		userBank.setUserId(userId);
		userBank.setStatus(Constants.COMMON_STATUS_1);
		userBank.setUnbindStatus(Constants.COMMON_STATUS_0);
		userBank = siteUserBankcardMapper.selectOne(userBank);
		
		String bankMsg = "";
		if(userBank != null){
			String cardNo = userBank.getCardNo();
			bankMsg += userBank.getBankName()+""+cardNo.substring(cardNo.length()-4, cardNo.length());
		}
		
		return bankMsg;
	}

}
